// 第17章异常拦截器
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
// session实现案例
import * as session from "express-session";
// 可以跨域使用
import * as cors from 'cors'
import {Request,Response,NextFunction} from "express";
// 一般中间件可以设置白名单,那些前缀的可以通行,或者鉴权
/**
 * 中间件一般有三种
 * 1.局部中间件(logger(自动生成的)/logger1(手写实现的))
 * 2.全局中间件,在下面
 * 3.安装第三方中间件(cors)
 */
const whiteList = ['/list']
function MiddleWareAll (req:Request,res:Response,next:NextFunction):void{
  console.log(req.originalUrl)
  if (whiteList.includes(req.originalUrl)){
    next()
  }else{
    res.send({message:'小黑子,露出马脚了吧,嘿嘿嘿'})
  }
  // next()
}
// 文件下载
import {NestExpressApplication} from "@nestjs/platform-express";
import {join} from "path";
// 响应拦截器
import { Response1 } from './common/response'
async function bootstrap() {
  const app = await NestFactory.create<NestExpressApplication>(AppModule);
  // 中间件部分
  app.use(cors())
  // app.use(MiddleWareAll)
  // upload访问上传的图片  http://localhost:3000/xiaozhou/1712163101000.png
  app.useStaticAssets(join(__dirname,'images'),{
    prefix:'/xiaozhou'
  })

  // @ts-ignore
  app.useGlobalFilters( new Response1())
  await app.listen(3000);
  // session实现案例
  app.use(session({secret:'xiaoZhou',rolling:true,name:'xiaozhou.sid',cookie:{maxAge:9999}}))
}
bootstrap();
